Análise Fatorial é uma técnica estatística para redução de dados. Ela reduz o número de variáveis (p) na análise, descrevendo combinações lineares destas (fatores) que contém a maior parte das informações das variáveis originais e que possam ter interpretações significativas. Estes fatores não são correlacionados entre si.
O “fator” é uma variável latente (não observada) que representa uma característica marcante dos dados. O objetivo da Análise Fatorial é identificar os r<p fatores e relacioná-los com as variáveis originais.
Segundo Mingoti (2005, p. 99), “a análise fatorial tem como objetivo principal descrever a variabilidade original do vetor de variáveis X, em termos de um número menor r de variáveis aleatórias, chamadas de fatores comuns e que estão relacionadas com o vetor original X através de um modelo linear. Neste modelo, parte da variabilidade de X é atribuída aos fatores comuns, sendo o restante da variabilidade de X atribuído às variáveis que não foram incluídas no modelo, ou seja, ao erro aleatório”.
Existem dois enfoques diferentes para Análise Fatorial: A Análise Fatorial Exploratória e a Análise Fatorial Confirmatória. A Análise Fatorial Exploratória objetiva determinar dimensões latentes dos dados denominadas fatores partindo-se de um conjunto de variáveis e a solução conduz a uma relação de todas as variáveis com todos os fatores. Na Análise Fatorial Confirmatória parte-se de um conjunto de variáveis e de um conjunto de hipóteses sobre o número de fatores e sobre quais variáveis se relacionam com quais fatores. O objetivo da análise é “confirmar” se as variáveis formam os fatores da forma como foi assumido. A formulação do modelo é baseada em uma teoria que será testada com a análise. O modelo especifica quais variáveis são relacionadas com quais fatores e se os fatores são correlacionados. A definição dos fatores é feita antes do ajustamento do modelo.
Seja \(\mathbf{x}\) um vetor aleatório \(p_x1\) com média \(\mathbf{\mu}\) e matriz de variância-covariância dada por \(\mathbf{\Sigma}\). A variância total de cada variável pode ser separada em três parcelas: fatores comuns (influenciam duas ou mais variáveis), fatores específicos (contribuem para a variação de uma única variável) e um erro.
Assim, a variação total vai ser a soma da variação comum (comunalidade), da variação específica (unicidade) e do erro.
onde \(\mathbf{f}\) é um vetor aleatório de ordem \(k_x1\)(\(k<p\)), com os elementos \(f_1, \dots, f_k\) sendo denominados fatores comuns (comunalidade); \(\Lambda\) é uma matriz de constantes desconhecidas \(p_xk\) chamadas de cargas fatoriais (ou coeficientes de correlação entre as variáveis e os fatores quando as variáveis são padronizadas); e os elementos \(\epsilon_1, \dots, \epsilon_p\) do \(p_x1\) vetor aleatório \(\mathbf{\epsilon}\) são chamados de fatores específicos (unicidade) e erro. Assume-se que \(\mathbf{f}\) e \(\mathbf{\epsilon}\) não são correlacionados.
O modelo tem como objetivo explicar o comportamento das p variáveis em função de r<p fatores comuns (desconhecidos) e de um termo de erro composto de unicidade (fatores específicos) e erro aleatório. O processo de estimação consiste em determinar a matriz de cargas fatoriais \(\mathbf{\Lambda}\).
Pressupostos do Modelo de Análise Fatorial
Os pressupostos do Modelo de Análise Fatorial podem ser resumidos em:
\(\mathbf{f} \sim (\mathbf{0},\mathbf{I})\), ou seja, os fatores possuem média zero e variância constante igual a um e não são autocorrelacionados;
\(\epsilon \sim (\mathbf{0},\mathbf{\Psi})\), em que \(\mathbf{\Psi}=diag(\psi_1,\dots,\psi_p)\), ou seja, os erros tem média zero e podem ter variâncias diferentes, mas não correlacionadas;
\(\mathbf{f}\) e \(\mathbf{\epsilon}\) são independentes, ou seja, os fatores comuns são independentes dos fatores específicos e erros.
A Análise Fatorial pode ser feita com a matriz de variâncias e covariâncias ou com a matriz de correlações. Como normalmente é recomendado o uso de variáveis padronizadas para contornar o problema de unidades de medidas diferentes e a influência que uma variável com variância grande pode ter na determinação das cargas fatoriais, a Análise Fatorial é, quase sempre, feita com a matriz de correlações \(\mathbf{\Sigma}\) .
No modelo fatorial, a matriz \(\mathbf{\Sigma}\) é decomposta como
sendo que é possível demonstrar que o resultado desta decomposição é
\[
\mathbf{\Sigma}=\mathbf{\Lambda}\mathbf{\Phi}\mathbf{\Lambda}'+\mathbf{\Psi}
\] Este resultado, que é derivado com base nas pressuposições do modelo, diz que a matriz de correlações pode ser decomposta em duas parcelas, uma relacionada com a comunalidade e outra com a unicidade. O modelo assume que os fatores não são correlacionados \(\mathbf{\Phi}=\mathbf{I}\).
Um termo importante na Análise Fatorial é a comunalidade, ou seja, o somatório das correlações dos fatores com a variável “i”.
A Unicidade (\(\mathbf{\Psi}\)) é dada por \(\mathbf{\Psi}=1-\mathbf{h_i^2}\).
A comunalidade é a parcela da variância de X explicada pelos r fatores e a unicidade é a parcela não explicada.
Estimação das Cargas Fatoriais
Dado o modelo
\[
\mathbf{x}=\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon}
\] pode-se entender o x como a variável dependente e o f como as variáveis explicativas, \(\Lambda\) como como os coefientes e \(\epsilon\) como os erros de um modelo de regressão múltipla.
O problema, então, é estimar \(\mathbf{\Lambda}\) e \(\mathbf{\Psi}\) que reproduzam \(\mathbf{\Sigma}\) com um número de fatores r menor que o número de variáveis originais p, mas apenas o x é conhecido.
Existem diversas formas de estimar as cargas fatoriais sendo que componentes principais e máxima verossimilhança são as principais. As explicações mais detalhadas podem ser encontradas em Mingoti (2005).
O método dos Componentes Principais é o mais usado e tem como base o uso das raízes características e vetores característicos relacionados com r<p componentes para estimar \(\Lambda\). O método de Máxima Verossimilhança maximiza uma função de verossimilhança formada com a pressuposição de que o vetor de variáveis aleatórias X segue distribuição normal p-variada com vetor de médias \(\mu\) e matriz de variâncias e covariâncias \(\mathbf{\Sigma}\).
O método dos componentes principais parte da decomposição espectral da matriz de variâncias e covariâncias \(\mathbf{\Sigma}\). Assim, é necessário informar que a decomposição espectral de uma matriz é uma operação que relaciona a matriz com seus autovalores e seus autovetores.
Considere A uma matriz \(p_xp\) simétrica com raízes características \(\lambda_p\) e vetores característicos \(x_p\). A decomposição espectral de A é dada por
\[
A=\sum \lambda_i x_i x_i'
\] com i variando de 1 a p. A decomposição pode ser representada por \(A=P \Lambda P'\) em que P é uma matriz cujas colunas são os vetores característicos normalizados de A e \(\Lambda\) é uma matriz diagonal com as raízes características de A na diagonal principal. Dessa relação tem-se, também, que \(\Lambda=PAP'\) que é uma operação denominada diagonalização de A.
Pelo teorema da decomposição espectral, a matriz de correlação amostral ou a matriz de variâncias e covariâncias pode ser decomposta como a soma de p matrizes, cada uma relacionada com um autovetor da matriz \(\mathbf{\Sigma}\).
\[
\Sigma=P \Lambda P'=\sum \lambda_i x_i x_i'
\] com i variando de 1 a p. Com p componentes, a matriz \(\mathbf{\Sigma}\) é totalmente reproduzida. Para r < p, pode-se escrever
Cada parcela desta soma envolve uma matriz de dimensão \(p_xp\) correspondente a informação da j-ésima componente fazendo com que a variabilidade das variáveis seja representada pela soma da variabilidade relacionada com cada componente. Assim, pode-se escrever
\[
\Sigma=\sum_{j=1}^r \lambda_j x_j x_j' + \sum_{j=r+1}^p \lambda_j x_j x_j'=P_1 \Lambda_1 P_1'+P_2 \Lambda_2 P_2'
\] e pode-se considerar uma aproximação da matriz de correlações \(\mathbf{\Sigma}\) dada por
\[
\mathbf{\Sigma} \approx P_1 \Lambda_1 P_1'=\sum_{j=1}^r \lambda_j x_j x_j'
\] o que possibilita estimar as matrizes \(\Lambda\) e \(\Psi\) por meio de raízes e vetores característicos de \(\mathbf{\Sigma}\).
Pela decomposição espectral ainda é possível escrever
\[
\mathbf{\Sigma} \approx P_1 \Lambda_1^{1/2} \Lambda_1^{1/2}P_1'
\] e definir por \(A=P_1 \Lambda_1^{1/2}\) e por \(A'=\Lambda_1^{1/2}P_1'\)
Esta aproximação de \(\mathbf{\Sigma}\) considera que os fatores específicos são de menor importância. Incluindo os fatores específicos a aproximação de \(\mathbf{\Sigma}\) fica
\[
\mathbf{\Sigma} \approx AA' + \Psi
\] e a matriz \(\Psi\), que é diagonal, pode ser estimada por
\[
\Psi = diag(R-AA')
\]
A matriz de resíduos resultante do ajustamento do modelo é definida por
\[
RES= \mathbf{\Sigma} - (AA'+\Psi)
\]
que serve como critério de avaliação do modelo. Valores pequenos, próximos de zero, indicam bom ajustamento. Esta matriz só é nula quando todos os “p” fatores são extraídos, o que não é o desejado na prática. Através destes procedimentos os elementos da diagonal da matriz \(\mathbf{\Sigma}\) (variâncias) são exatamente reproduzidos por \(AA'+\Psi\). Entretanto, o mesmo não ocorre para os elementos fora da diagonal principal (correlações).
Todo o conhecimento de Componentes Principais se aplica neste caso com os componentes agora denominados fatores.
Demonstração de Análise Fatorial no R por Componentes Principais
#Direcionado o R para o Diretorio a ser trabalhadosetwd('/Users/jricardofl/Dropbox/tempecon/multivariada')library(tidyverse)library(skimr)library(psych)library(REdaS)#Lendo os dados no Rdados <-read.csv2('winequality-red.csv', sep=";", dec=".")dados <- dados |> dplyr::select(-quality) #retira a variável qualityattach(dados)glimpse(dados)
# Estatística descritiva das variáveissummary(dados)
fixed.acidity volatile.acidity citric.acid residual.sugar
Min. : 4.60 Min. :0.1200 Min. :0.000 Min. : 0.900
1st Qu.: 7.10 1st Qu.:0.3900 1st Qu.:0.090 1st Qu.: 1.900
Median : 7.90 Median :0.5200 Median :0.260 Median : 2.200
Mean : 8.32 Mean :0.5278 Mean :0.271 Mean : 2.539
3rd Qu.: 9.20 3rd Qu.:0.6400 3rd Qu.:0.420 3rd Qu.: 2.600
Max. :15.90 Max. :1.5800 Max. :1.000 Max. :15.500
chlorides free.sulfur.dioxide total.sulfur.dioxide density
Min. :0.01200 Min. : 1.00 Min. : 6.00 Min. :0.9901
1st Qu.:0.07000 1st Qu.: 7.00 1st Qu.: 22.00 1st Qu.:0.9956
Median :0.07900 Median :14.00 Median : 38.00 Median :0.9968
Mean :0.08747 Mean :15.87 Mean : 46.47 Mean :0.9967
3rd Qu.:0.09000 3rd Qu.:21.00 3rd Qu.: 62.00 3rd Qu.:0.9978
Max. :0.61100 Max. :72.00 Max. :289.00 Max. :1.0037
pH sulphates alcohol
Min. :2.740 Min. :0.3300 Min. : 8.40
1st Qu.:3.210 1st Qu.:0.5500 1st Qu.: 9.50
Median :3.310 Median :0.6200 Median :10.20
Mean :3.311 Mean :0.6581 Mean :10.42
3rd Qu.:3.400 3rd Qu.:0.7300 3rd Qu.:11.10
Max. :4.010 Max. :2.0000 Max. :14.90
skim(dados)
Data summary
Name
dados
Number of rows
1599
Number of columns
11
_______________________
Column type frequency:
numeric
11
________________________
Group variables
None
Variable type: numeric
skim_variable
n_missing
complete_rate
mean
sd
p0
p25
p50
p75
p100
hist
fixed.acidity
0
1
8.32
1.74
4.60
7.10
7.90
9.20
15.90
▂▇▂▁▁
volatile.acidity
0
1
0.53
0.18
0.12
0.39
0.52
0.64
1.58
▅▇▂▁▁
citric.acid
0
1
0.27
0.19
0.00
0.09
0.26
0.42
1.00
▇▆▅▁▁
residual.sugar
0
1
2.54
1.41
0.90
1.90
2.20
2.60
15.50
▇▁▁▁▁
chlorides
0
1
0.09
0.05
0.01
0.07
0.08
0.09
0.61
▇▁▁▁▁
free.sulfur.dioxide
0
1
15.87
10.46
1.00
7.00
14.00
21.00
72.00
▇▅▁▁▁
total.sulfur.dioxide
0
1
46.47
32.90
6.00
22.00
38.00
62.00
289.00
▇▂▁▁▁
density
0
1
1.00
0.00
0.99
1.00
1.00
1.00
1.00
▁▃▇▂▁
pH
0
1
3.31
0.15
2.74
3.21
3.31
3.40
4.01
▁▅▇▂▁
sulphates
0
1
0.66
0.17
0.33
0.55
0.62
0.73
2.00
▇▅▁▁▁
alcohol
0
1
10.42
1.07
8.40
9.50
10.20
11.10
14.90
▇▇▃▁▁
O banco de dados é composto por 1599 observações e 12 variáveis: acidez fixa, acidez volátil, ácido cítrico, açucar residual, cloretos, dióxido de enxofre livre, dióxido de enxofre total, densidade, Ph, sulfatos, álcool.
#Obtenção do Modelo Fatorial Ortogonal#Analise Fatorial - dados devem ser padronizados#Padronizaçao dos dadosdados.pad <-as.data.frame(scale(dados))s <-cov(dados.pad) #matriz de cov com var pad = mat correlaçoes origem#Autovalores e Autovetores da Matriz de Covarianciaslambda <-eigen(s)$valueslambda #
#2 Forma de fazer a Analise Fatorialmatcor <-cor(dados)k <-4dados.pca <-prcomp(dados.pad, scale =TRUE) #PCAcarfat <- dados.pca$rotation[, 1:k] %*%diag(dados.pca$sdev[1:k])colnames(carfat) <-paste("Fator", 1:k, sep =" ")#Cargas Fatoriais com autovalor maior do que 1carfat
# Estimativas das cargas fatoriais das variaveis plot(carfat, pch =20, col ="red", xlab ="Fator 1", ylab ="Fator 2")text(carfat, rownames(carfat), adj =1)
Em relação a Análise Fatorial por Máxima Verossimilhança, supondo o vetor de variáveis com distribuição Normal p-variada, tem-se
as variáveis padronizadas serão Z \(\sim\) N(0, \(\Sigma\));
o vetor de fatores será F \(\sim\) N(0,I);
o vetor de erros será \(\epsilon \sim N(0, \Psi)\)
Pelo modelo fatorial \(\mathbf{x}=\mathbf{\Lambda} \mathbf{f}+ \mathbf{\epsilon}\) e \(\mathbf{\Sigma} \approx AA' + \Psi\). Com uma amostra de n observações o objetivo é estimar \(\hat A\) e \(\hat \Psi\). O procedimento consiste em maximizar a função de verossimilhança
\[
L(0, \Sigma)=(2 \pi)^{(\frac{-np}{2})}|AA' + \Psi|^{\frac{-n}{2}}e^{\frac{-1}{2}\sum_{j=1}^n Z_j'(AA'+\Psi)^{-1}Z_j}
\] É necessário definir o número de fatores antecipadamente. Uma mudança neste número acarreta mudança nas cargas fatoriais, diferentemente do método de componentes principais. Na Analise Fatorial por Máxima Verossimilhança há equivalência entre decompor \(\Sigma\) ou a matriz de covariâncias \(S\), o que não ocorre na AF via Componentes Principais.
Demonstração de Análise Fatorial no R por Máxima Verossimilhança
# Definição do número de Fatoreseigv <-eigen(cor(dados))eigv <-data.frame(nfact =1:ncol(dados), eigval = eigv$values)ggplot(data = eigv, mapping =aes(nfact, eigval)) +geom_line() +geom_point() +geom_abline(slope =0, intercept =1, color ="red") +labs(x ="Número de fatores",y ="Autovalor",title ="Scree plot") +theme_bw()
#Terceira forma de fazer - factanal()#Usar as variaveis padronizadas - dados.pad#Não usa componentes principais, usa max verosimilhança#Pelo Screeplot, tem-se 4 autovalores acima de 1fatorial1 <-factanal(dados.pad, factors=4, rotation="none", na.action=na.omit)fatorial1
Call:
factanal(x = dados.pad, factors = 4, na.action = na.omit, rotation = "none")
Uniquenesses:
fixed.acidity volatile.acidity citric.acid
0.101 0.789 0.401
residual.sugar chlorides free.sulfur.dioxide
0.701 0.921 0.454
total.sulfur.dioxide density pH
0.171 0.005 0.271
sulphates alcohol
0.905 0.005
Loadings:
Factor1 Factor2 Factor3 Factor4
fixed.acidity 0.438 -0.521 0.628 0.203
volatile.acidity 0.123 0.328 -0.202 -0.218
citric.acid 0.162 -0.430 0.499 0.373
residual.sugar 0.185 0.325 0.379 0.125
chlorides 0.245
free.sulfur.dioxide 0.451 -0.104 0.575
total.sulfur.dioxide 0.160 0.467 -0.148 0.750
density 0.871 0.486
pH -0.329 0.632 -0.168 -0.439
sulphates 0.245 0.167
alcohol -0.856 0.512
Factor1 Factor2 Factor3 Factor4
SS loadings 1.954 1.506 1.448 1.369
Proportion Var 0.178 0.137 0.132 0.124
Cumulative Var 0.178 0.315 0.446 0.571
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 1458.43 on 17 degrees of freedom.
The p-value is 4.32e-300
#fatorial1$loadingsload = fatorial1$loadings[,c(1,2)]plot(load, type="n")text(load, labels=names(dados.pad),cex = .7)#visualiza variaveis com fatores
fa.diagram(fatorial1$loadings, digits =3, main ="Análise Fatorial")
A partir do diagrama com as cargas fatoriais é possível observar que as variáveis cloreto e sulfatos têm pouco peso na composição dos fatores. Assim, pode-se excluir tais variáveis do modelo.
Call:
factanal(x = dados2.pad, factors = 4, na.action = na.omit, rotation = "none")
Uniquenesses:
fixed.acidity volatile.acidity citric.acid
0.077 0.804 0.423
residual.sugar free.sulfur.dioxide total.sulfur.dioxide
0.699 0.486 0.114
density pH alcohol
0.005 0.295 0.005
Loadings:
Factor1 Factor2 Factor3 Factor4
fixed.acidity 0.442 -0.320 0.634 0.472
volatile.acidity 0.121 0.156 -0.205 -0.339
citric.acid 0.164 -0.140 0.502 0.527
residual.sugar 0.186 0.341 0.374 -0.102
free.sulfur.dioxide 0.672 -0.109 0.223
total.sulfur.dioxide 0.160 0.831 -0.155 0.381
density 0.872 0.482
pH -0.331 0.274 -0.174 -0.700
alcohol -0.854 0.515
Factor1 Factor2 Factor3 Factor4
SS loadings 1.898 1.481 1.400 1.313
Proportion Var 0.211 0.165 0.156 0.146
Cumulative Var 0.211 0.375 0.531 0.677
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 734.47 on 6 degrees of freedom.
The p-value is 2.2e-155
Rotação de Fatores
Sabe-se que vetores característicos não são únicos e, por isso, as cargas fatoriais da Análise Fatorial por Componentes Principais podem ser modificadas sem prejudicar o significado da análise. A rotação consiste em “modificar” as cargas fatoriais, ou seja, calcular nova matriz A. O objetivo é obter uma matriz de cargas fatoriais de mais fácil interpretação, onde cada fator se relaciona mais distintamente com certo grupo de variáveis.
No entanto, nem sempre se tem uma estrutura nítida de relacionamento de variáveis e fatores. Normalmente, todas as variáveis apresentam coeficiente de correlação de certa magnitude com todos os fatores e, muitas vezes, é difícil identificar a relação de forma adequada. A rotação de fatores/eixos é um procedimento matematicamente correto e tem como finalidade facilitar a interpretação dos fatores, isto é, gerar uma nova solução para as cargas fatoriais que mostra uma relação mais nítida entre variáveis e fatores.
A rotação dos fatores consiste na rotação dos eixos coordenados e o cálculo de novos valores de abscissas e ordenadas relacionados com o novo sistema de eixos. Se o ângulo do novo sistema se mantiver em 90º, a rotação é denominada ortogonal e, se mudar o ângulo, a rotação é denominada oblíqua. No primeiro caso os fatores permanecem não correlacionados, mas, no segundo caso, haverá correlação, o que dificulta a interpretação.
Vale ressaltar que a rotação ortogonal modifica as cargas fatoriais, mas não modifica as comunalidades (\(h_i^2\)) e, como observa Mingoti (2005, p. 121), “em termos de qualidade de ajuste, esta nova solução não acrescenta nenhuma melhoria em relação ao ajuste obtido usando a matriz \(\hat A_{p_xm}\), pois a matriz residual original não é alterada pela transformação ortogonal”.
Existem diversos métodos de rotação, tanto ortogonal (Varimax, Quartimax, Orthomax, Equimax) quanto oblíqua (Oblimim, Quartimim, Biquartimim, Covax). Entretanto, o método de rotação mais utilizado é o Varimax, o qual permite que os coeficientes de correlação entre os indicadores e os fatores fiquem o mais próximo possível de zero ou de 1 em valor absoluto, facilitando a interpretação.
O método de Rotação Varimax “forma um novo sistema de eixos ortogonais com o mesmo número de fatores e permite que o grupo de variáveis apareça com maior nitidez, facilitando a interpretação e análise” (ZAMBRANO e LIMA, 2004).
Considere que partindo da já vista matriz de correlaçoes
\[
\mathbf{\Sigma} = AA'+\Psi
\] se tenha uma matriz ortogonal T de tal forma que \(TT'=I\). Então, é possível escrever
\[
\mathbf{\Sigma} = ATT'A'+\Psi
\]
\[
\mathbf{\Sigma} = AT(AT)'+\Psi
\]
se denominar AT por A*, tem-se
\[
\mathbf{\Sigma} = A^{*} A^{* '}+ \Psi
\] isto significa que dada uma solução para A, é possível encontrar uma outra solução para \(A^*\), através da escolha da matriz ortogonal T, que seja de mais fácil interpretação do que a solução original.
No critério Varimax, a busca pela matriz T tem como base a tentativa de encontrar fatores com grandes variabilidades nas cargas fatoriais, isto é, encontrar para um fator fixo, um grupo de variáveis X altamente correlacionadas com o fator e um outro grupo de variáveis que tenham correlação desprezível ou moderada com o fator.
Para cada fator fixo, a solução é obtida através da maximização da variação dos quadrados das cargas fatoriais originais das colunas da matriz A. Seja \(\hat a_{ij}^*\) o coeficiente da i-ésima variável no j-ésimo fator após a rotação, e seja V a quantidade definida por
onde \(\tilde a_{ij}=(\hat a_{ij}^*/ \hat h_i)\), sendo \(\hat h_i\) a raiz quadrada da comunalidade da variável \(X_i\). A maximização de V corresponde a “puxar” os quadrados das cargas sobre cada fator o máximo possível. O que se espera é encontrar grupos definidos de coeficientes para cada coluna de fator.
A função da rotação de fatores tem a função de procurar cargas fatoriais que mostram um padrão de relacionamento claro e de fácil interpretação entre variáveis e fatores. Deve-se observar que as comunalidades não mudam, o que é uma característica da rotação ortogonal.
#Esimação da AF fazendo a rotação Varimaxfatorial3<-factanal(dados2.pad, factors=4, rotation="varimax", na.action=na.omit)fatorial3
Call:
factanal(x = dados2.pad, factors = 4, na.action = na.omit, rotation = "varimax")
Uniquenesses:
fixed.acidity volatile.acidity citric.acid
0.077 0.804 0.423
residual.sugar free.sulfur.dioxide total.sulfur.dioxide
0.699 0.486 0.114
density pH alcohol
0.005 0.295 0.005
Loadings:
Factor1 Factor2 Factor3 Factor4
fixed.acidity 0.843 -0.191 -0.110 0.404
volatile.acidity -0.395 -0.180
citric.acid 0.725 0.212
residual.sugar 0.186 0.510
free.sulfur.dioxide 0.709
total.sulfur.dioxide 0.929 -0.113 0.102
density 0.329 -0.500 0.794
pH -0.801 0.244
alcohol 0.991
Factor1 Factor2 Factor3 Factor4
SS loadings 2.150 1.454 1.362 1.126
Proportion Var 0.239 0.162 0.151 0.125
Cumulative Var 0.239 0.401 0.552 0.677
Test of the hypothesis that 4 factors are sufficient.
The chi square statistic is 734.47 on 6 degrees of freedom.
The p-value is 2.2e-155
fa.diagram(fatorial3$loadings, digits =3, main ="Análise Fatorial - Modelo Rotacionado Varimax")
Para esse último modelo, o fator 1 está fortemente relacionado à acidez e Ph. O fator 2 ao dióxido de enxofre, o fator 3 é composto pela quantidade de alcool e o fator 4 pela densidade e açucar residual.
A partir das comunalidades é possível concluir que os 4 fatores explicam cerca de 92% da variabilidade da acidez fixa, pouco mais de 19% da variabilidade da acidez volátil, 57% da variabilidade da acidez cítrica, 30% da variabilidade do açucar residual, 51% da variabilidade do enxofre livre, 88% da variação no enxofre total, 99% da variação na densidade, 70% na variação do Ph e 99% da variabilidade do teor alcólico.
A análise da matriz residual indica a qualidade do modelo, que deve possuir uma matriz residual com valores muito próximos a zero. Assim, a partir desta matriz residual, o modelo em questão indica que a Análise Fatorial se ajusta bem aos dados amostrais, pois a grande maioria dos valores da matriz foram calculados proximos a zero.
Escores Fatoriais
Escores fatoriais são os valores de cada fator para cada observação da amostra. São importantes para mapeamento das observações e para serem utilizadas em outras técnicas, como cluster, regressão, etc. Como se tem um modelo estatístico estes escores devem ser estimados à semelhança de um modelo de regressão onde se obtém previsões para a variável dependente.
#Esimação da AF fazendo a rotação Varimaxfatorial3<-factanal(dados2.pad, factors=4, rotation="varimax", na.action=na.omit, scores ="regression")escores <-as.data.frame(fatorial3$scores)head(escores)
Matriz de Correlações: examinar a matriz de correlações simples, procurando visualizar algum padrão de relacionamento entre as variáveis; devem existir grupos de variáveis correlacionadas;
Matriz Anti-Imagem: Matriz de correlações Parciais com sinais invertidos. Matrizes anti-imagem podem ser usadas para avaliar se variáveis individuais devem ser incluídas na análise fatorial. Isso significa trazer a porção de variância de uma variável que pode ser explicada com as variáveis correlacionadas (imagem) em associação com a porção de variância inexplicável (anti-imagem). As variáveis são adequadas para incluir na análise fatorial se os valores da matriz anti-imagem forem baixos;
Teste de esfericidade de Bartlett: testa se a matriz de correlações é estatisticamente igual a uma matriz identidade. Se for, não é boa para Análise Fatorial. O que se busca, então, é rejeitar a hipótese nula de que a matriz de correlação verdadeira é uma matriz identidade;
Medida KMO (Kayser-Meyer-Olkin): é um índice que compara correlações simples e parciais:
\[
\mathbf{KMO}=\frac{\sum_{i=1}^{p}\sum_{j=1}^{p}r_{ij}^2}{\sum_{i=1}^{p}\sum_{j=1}^{p}r_{ij}^2+\sum_{i=1}^{p}\sum_{j=1}^{p}a_{ij}^2}
\] em que \(r_{ij}\) é o coeficiente de correlação simples e \(a_{ij}\) é a correlação parcial.
Quanto mais \(\sum_{i=1}^{p}\sum_{j=1}^{p}a_{ij}^2\) for próximo de 0, mais o valor de \(\mathbf{KMO}\) se aproximará de 1 e mais adequados os dados serão para a Análise fatorial. Valores abaixo de 0,6 são considerados ruins para a Análise Fatorial.
#Correlaçoes Parciais - Matriz anti-imagem coeficientes de corrpartial.cor <-function (X, ...){ R <-cor(X, ...) RI <-solve(R) D <-1/sqrt(diag(RI)) Rp <--RI * (D %o% D)diag(Rp) <-0rownames(Rp) <-colnames(Rp) <-colnames(X) Rp}matcorp <-partial.cor(dados)print(matcorp, digits=2)
# Bartlett teste de esfericidadecortest.bartlett(cor(dados), n =nrow(dados))
$chisq
[1] 8017.566
$p.value
[1] 0
$df
[1] 55
bart_spher(dados)
Bartlett's Test of Sphericity
Call: bart_spher(x = dados)
X2 = 8017.566
df = 55
p-value < 2.22e-16
Um outro exemplo é do trabalho que visou construiu um Índice de Desenvolvimento Humano da mesorregião do Campo das Vertentes-MG (IDF-CV), para o ano de 2000, com base em 10 indicadores socioeconômicos de saúde, infraestrutura, educação e vulnerabilidade renda (Esperança de vida ao nascer; Mortalidade até um ano de idade; em cada mil crianças nascidas vivas; Percentual de pessoas que vivem em domicílios com banheiro e água encanada; Percentual de pessoas que vivem em domicílios com energia elétrica e geladeira; Percentual de pessoas que vivem em domicílios urbanos com serviço de coleta de lixo; Percentual de pessoas que vivem em domicílios com carro, computador e TV; Percentual da renda proveniente de transferências governamentais; Razão entre a renda média dos 20% mais ricos e a dos 40% mais pobres; Percentual de pessoas que vivem em famílias com razão de dependência maior que 75%; Taxa de alfabetização). Para isto, foi utilizada a técnica da Análise Fatorial.
#Direcionado o R para o Diretorio a ser trabalhadosetwd('/Users/jricardofl/Dropbox/tempecon/multivariada')library(tidyverse)library(skimr)library(psych)library(REdaS)#Lendo os dados no Rdadosc <-read.csv2('idh_mg.csv', header=TRUE, sep=";", dec=".")dados <- dadosc[,-1]attach(dados)glimpse(dados)
# Estatística descritiva das variáveissummary(dados)
esp mort banho energia
Min. :65.34 Min. :16.43 Min. :74.52 Min. :47.10
1st Qu.:69.14 1st Qu.:25.36 1st Qu.:85.75 1st Qu.:63.50
Median :70.68 Median :26.66 Median :90.58 Median :73.72
Mean :70.22 Mean :28.32 Mean :89.46 Mean :73.07
3rd Qu.:71.13 3rd Qu.:31.33 3rd Qu.:93.75 3rd Qu.:82.09
Max. :74.58 Max. :44.67 Max. :99.39 Max. :94.07
lixo rend_transf X20_40pobres alfabet
Min. :73.17 Min. :12.46 Min. : 6.270 Min. :76.54
1st Qu.:83.63 1st Qu.:18.82 1st Qu.: 8.615 1st Qu.:85.27
Median :88.75 Median :20.61 Median :11.350 Median :88.41
Mean :88.45 Mean :20.59 Mean :11.111 Mean :87.49
3rd Qu.:93.67 3rd Qu.:22.55 3rd Qu.:12.480 3rd Qu.:90.69
Max. :97.14 Max. :26.39 Max. :18.670 Max. :94.01
ant_3 dep_75
Min. :19.87 Min. :32.66
1st Qu.:25.57 1st Qu.:35.55
Median :31.25 Median :36.82
Mean :32.13 Mean :36.76
3rd Qu.:35.07 3rd Qu.:37.74
Max. :58.16 Max. :42.85
skim(dados)
Data summary
Name
dados
Number of rows
36
Number of columns
10
_______________________
Column type frequency:
numeric
10
________________________
Group variables
None
Variable type: numeric
skim_variable
n_missing
complete_rate
mean
sd
p0
p25
p50
p75
p100
hist
esp
0
1
70.22
1.96
65.34
69.14
70.68
71.13
74.58
▂▂▇▆▁
mort
0
1
28.32
6.07
16.43
25.36
26.66
31.33
44.67
▃▇▃▂▂
banho
0
1
89.46
5.56
74.52
85.76
90.58
93.75
99.39
▁▅▆▇▅
energia
0
1
73.07
12.52
47.10
63.50
73.72
82.09
94.07
▃▃▆▇▅
lixo
0
1
88.45
6.55
73.17
83.63
88.75
93.67
97.14
▁▃▃▃▇
rend_transf
0
1
20.59
3.01
12.46
18.82
20.60
22.55
26.39
▁▂▇▅▃
X20_40pobres
0
1
11.11
3.04
6.27
8.62
11.35
12.48
18.67
▆▃▇▃▁
alfabet
0
1
87.49
4.30
76.54
85.27
88.41
90.69
94.01
▂▂▅▇▆
ant_3
0
1
32.13
9.33
19.87
25.56
31.25
35.07
58.16
▆▇▂▂▁
dep_75
0
1
36.76
2.16
32.66
35.55
36.82
37.74
42.85
▃▆▇▂▁
#Estatística KMOKMO(cor(dados))
Kaiser-Meyer-Olkin factor adequacy
Call: KMO(r = cor(dados))
Overall MSA = 0.7
MSA for each item =
esp mort banho energia lixo rend_transf
0.67 0.67 0.73 0.73 0.87 0.51
X20_40pobres alfabet ant_3 dep_75
0.24 0.85 0.74 0.58
# Bartlett teste de esfericidadecortest.bartlett(cor(dados), n =nrow(dados))
# Definição do número de Fatoreseigv <-eigen(cor(dados))eigv <-data.frame(nfact =1:ncol(dados), eigval = eigv$values)ggplot(data = eigv, mapping =aes(nfact, eigval)) +geom_line() +geom_point() +geom_abline(slope =0, intercept =1, color ="red") +labs(x ="Número de fatores",y ="Autovalor",title ="Scree plot") +theme_bw()
#Padronizaçao dos dadosdados.pad <-as.data.frame(scale(dados))s <-cov(dados.pad) #matriz de cov com var pad = mat correlaçoes origem#Autovalores e Autovetores da Matriz de Covarianciaslambda <-eigen(s)$valueslambda[1:3]